/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo;

import Control.Control;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import Control.controlPersona;
import java.sql.ResultSet;
import java.util.List;
import java.util.Vector;

/**
 *
 * @author Jesus
 */
public class DALPERSONA extends Control implements controlPersona {

    private Connection conexion;
    private PreparedStatement stmt;

    public DALPERSONA() throws ClassNotFoundException {
        try {
            Class.forName(DRIVER);
            this.conexion = DriverManager.getConnection(URL, usuario, password);
            this.conexion.setAutoCommit(false);
        } catch (SQLException ex) {
            Logger.getLogger(Persona.class.getName()).log(Level.SEVERE, null, ex);
        }

    }

    public boolean insertPersona(Persona _persona) {
        boolean respuesta = false;
        int exuteRespuesta = 0;
        try {
            String sql = "INSERT INTO PERSONA(ID,NOMBRE,APELLIDOP,APELLIDOM,EDAD,GENERO) VALUES(?,?,?,?,?,?)";
            stmt = this.conexion.prepareStatement(sql);
            stmt.setInt(1, _persona.getID());
            stmt.setString(2, _persona.getNOMBRE());
            stmt.setString(3, _persona.getAPELLIDOP());
            stmt.setString(4, _persona.getAPELLIDOM());
            stmt.setInt(5, _persona.getEDAD());
            stmt.setString(6, _persona.getGENERO());
            exuteRespuesta = stmt.executeUpdate();
            this.conexion.commit();
            if (exuteRespuesta > 0) {
                respuesta = true;
            }
        } catch (SQLException ex) {
            Logger.getLogger(DALPERSONA.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            return respuesta;
        }
    }

    @Override
    public boolean deletePersona(Persona _persona) {
        boolean respuesta = false;
        int exuteRespuesta = 0;
        try {

            String sql = "DELETE FROM PERSONA WHERE ID =?  ";
            stmt = this.conexion.prepareStatement(sql);
            stmt.setInt(1, _persona.getID());
            exuteRespuesta = stmt.executeUpdate();
            this.conexion.commit();
            if (exuteRespuesta > 0) {
                respuesta = true;
            }
        } catch (SQLException ex) {
            Logger.getLogger(DALPERSONA.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            return respuesta;
        }


    }

    @Override
    public boolean updatePersona(Persona _persona) {
        boolean respuesta = false;
        int exuteRespuesta = 0;
        try {
            String sql = "UPDATE PERSONA SET  NOMBRE=?,APELLIDOP=?,APELLIDOM=?,EDAD=?,GENERO=? WHERE ID=?";
            stmt = this.conexion.prepareStatement(sql);
            stmt.setString(1, _persona.getNOMBRE());
            stmt.setString(2, _persona.getAPELLIDOP());
            stmt.setString(3, _persona.getAPELLIDOM());
            stmt.setInt(4, _persona.getEDAD());
            stmt.setString(5, _persona.getGENERO());
            stmt.setInt(6, _persona.getID());
            exuteRespuesta = stmt.executeUpdate();
            this.conexion.commit();
            if (exuteRespuesta > 0) {
                respuesta = true;
            }
        } catch (SQLException ex) {
            Logger.getLogger(DALPERSONA.class.getName()).log(Level.SEVERE, null, ex);
        }
        return respuesta;

    }

    public Persona selectPersonaByNombre(String _Nombre) {

        ResultSet rs;
        Persona persona = new Persona();
        try {
            String sql = "SELECT *  FROM PERSONA WHERE NOMBRE=?";
            stmt = this.conexion.prepareStatement(sql);
            stmt.setString(1, _Nombre);
            rs = stmt.executeQuery();
            while (rs.next()) {
                persona.setID(rs.getInt("ID"));
                persona.setNOMBRE(rs.getString("NOMBRE"));
                persona.setAPELLIDOP(rs.getString("APELLIDOP"));
                persona.setAPELLIDOM(rs.getString("APELLIDOM"));
                persona.setEDAD(rs.getInt("EDAD"));
                persona.setGENERO(rs.getString("GENERO"));

            }
            rs.close();
        } catch (SQLException ex) {
            Logger.getLogger(DALPERSONA.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            return persona;
        }
    }

    @Override
    public List selectPersonas() {

        Vector lista = new Vector();
        ResultSet rs;
        try {
            String sql = "SELECT * FROM PERSONA ";
            stmt = this.conexion.prepareStatement(sql);
            rs = stmt.executeQuery(sql);
            while (rs.next()) {
                Persona persona = new Persona();
                persona.setID(rs.getInt("ID"));
                persona.setNOMBRE(rs.getString("NOMBRE"));
                persona.setAPELLIDOP(rs.getString("APELLIDOP"));
                persona.setAPELLIDOM(rs.getString("APELLIDOM"));
                persona.setEDAD(rs.getInt("EDAD"));
                persona.setGENERO(rs.getString("GENERO"));

                lista.add(persona);

            }

            return lista;

        } catch (SQLException ex) {
            Logger.getLogger(DALPERSONA.class.getName()).log(Level.SEVERE, null, ex);
        } finally {
            return lista;
        }
    }
}
